package com.hnit.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnit.web.DTO.OrdersDTO;
import com.hnit.web.DTO.OrdersItemsDTO;
import com.hnit.web.bean.Orders;

import java.time.LocalDateTime;
import java.util.List;

public interface OrdersService extends IService<Orders> {
    /**
     * 创建一个新订单
     *
     * @param ordersDTO         订单数据
     * @param orderItemsDTOList 订单项数据列表
     * @param cartIds
     * @return 成功创建的订单ID
     */
    OrdersDTO createOrder(Long userId, OrdersDTO ordersDTO, List<OrdersItemsDTO> orderItemsDTOList, List<Long> cartIds);

    /**
     * 根据用户ID和订单状态查询订单
     *
     * @param userId      用户ID
     * @param orderStatus 订单状态（可为null，表示查询所有状态）
     * @param page        页码
     * @param size        每页大小
     * @return 订单列表
     */
    List<OrdersDTO> getOrdersByUserIdAndStatus(Long userId, Integer orderStatus, Integer page, Integer size);

    OrdersDTO getOrderById(Long orderId);

    /**
     * 更新订单状态
     *
     * @param orderId   订单ID
     * @param newStatus 新的订单状态
     * @return 更新后的订单信息
     */
    OrdersDTO updateOrderStatus(Long orderId, Integer newStatus);

    Boolean cancelOrder(Long orderId);

    Boolean confirmReceipt(Long orderId);

    /**
     * 管理员获取所有订单记录，分页查询
     *
     * @param page 页码
     * @param size 每页大小
     * @return 订单列表
     */
    IPage<OrdersDTO> getAllOrders(Integer page, Integer size,
                                  Long orderId, Long userId, Integer orderStatus,
                                  LocalDateTime paymentStartTime, LocalDateTime paymentEndTime,
                                  LocalDateTime shippingStartTime, LocalDateTime shippingEndTime);
}
